//
//  ViewController.m
//  区域范围
//
//  Created by 周成龙 on 16/10/18.
//  Copyright © 2016年 ZCL. All rights reserved.
//

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()<CLLocationManagerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *noticeLabel;

/** 位置管理者 */
@property (nonatomic, strong) CLLocationManager *locationM;

@end

@implementation ViewController

#pragma mark - 懒加载
/** 位置管理者 */
- (CLLocationManager *)locationM
{
    if (!_locationM) {
        _locationM = [[CLLocationManager alloc] init];
        _locationM.delegate = self;
        
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
            [_locationM requestAlwaysAuthorization];
        }
        
        
    }
    return _locationM;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    
    // ----区域监听
    // -1. 判断当前设备是否支持区域监听(区域类型)
    if (![CLLocationManager isMonitoringAvailableForClass:[CLCircularRegion class]]) {
        return;
    }
    
    // 0. 创建区域中心
    CLLocationCoordinate2D center = CLLocationCoordinate2DMake(31.192576, 121.596993);
    
    // 0.1 创建区域半径
    CLLocationDistance distance = 1000.0;
    if(distance > self.locationM.maximumRegionMonitoringDistance)
    {
        distance = self.locationM.maximumRegionMonitoringDistance;
    }
    
    // 1. 创建一个区域
    CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:distance identifier:@"zak"];
    
    // 2. 监听一个区域(只有用户有进入区域, 或者离开区域动作的时候 才会通过代理告诉外界)
    [self.locationM startMonitoringForRegion:region];
    
    // 请求某个区域的状态
    // 不止可以获取到指定区域的状态, 而且当状态发生变化时, 也会调用对应的代理方法, 告诉我们
    [self.locationM requestStateForRegion:region];
    
    
}

#pragma mark - CLLocationManagerDelegate

/**
 *  进入指定区域时调用
 *
 *  @param manager 位置管理者
 *  @param region  区域
 */
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    
    NSLog(@"进入区域---%@", region.identifier);
    self.noticeLabel.text = @"开呀造作啊！！！";
}
/**
 *  离开指定区域时调用
 *
 *  @param manager 位置管理者
 *  @param region  区域
 */
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
    NSLog(@"离开区域---%@", region.identifier);
    self.noticeLabel.text = @"跑个毛线啊";
    
}

/**
 *  当前请求指定区域状态时, 回调的代理方法
 *
 *  @param manager 位置管理者
 *  @param state   状态
 *  @param region  区域
 */
-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
    /**
     *  	CLRegionStateUnknown, // 不知道
     CLRegionStateInside, // 在区域内部
     CLRegionStateOutside // 在区域外部
     */
    
    if(state == CLRegionStateInside)
    {
        self.noticeLabel.text = @"哈哈，跑不了儿吧逗逼！！！";
    }else if (state == CLRegionStateOutside)
    {
        self.noticeLabel.text = @"哈哈，你个逗逼别跑！！！";
    }
    
}

@end
